﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using DBConnect;
using System.Collections;
using System.Drawing.Imaging;

namespace TISS_Add_in
{
    public partial class uc_ModConfig : UserControl
    {
        private bool updatePres = false;
        private TipoPrestador tipoPrestador;
        private long IDPrestador;

        private bool updateConf = false;
        private ListView lvw = new ListView();

        private bool updateOp = false;
        private string oldRegANS = "";

        //DataSet ds = new DataSet();
        private long usuarioID;
        public long UsuarioID
        {
            set { usuarioID = value; }
        }
        private string nomeUsuario;
        public string NomeUsuario
        {
            set { nomeUsuario = value; }
        }

        public uc_ModConfig()
        {
            InitializeComponent();
        }

        private void uc_ModConfig_Load(object sender, EventArgs e)
        {
            carregaPrestadores();
            carregaOpCadastradas();
            carregaTipoLogradouro();
            carregaCBOS();
        }

        #region Métodos

        /// <summary>
        /// Carrega Prestador no ListView da guia de Prestadores
        /// </summary>
        private void carregaPrestadores()
        {
            lvPrestador.Items.Clear();
            DataTable dt = CommandModConf.selecionaPrestadores();
            //btnExcluirPrestador.Enabled = false;
            if (dt.Rows.Count > 0)
            {
                ListViewGroup groupProfissional = new ListViewGroup("Profissionais", HorizontalAlignment.Center);
                ListViewGroup groupClinHosp = new ListViewGroup("Clínica/Hospitais", HorizontalAlignment.Center);
                lvPrestador.Groups.Add(groupProfissional);
                lvPrestador.Groups.Add(groupClinHosp);
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    ListViewItem item = new ListViewItem(dt.Rows[i].ItemArray[2].ToString());
                    if (dt.Rows[i].ItemArray[0].ToString() != "")
                    {
                        item.SubItems.Add(dt.Rows[i].ItemArray[0].ToString());
                        groupProfissional.Items.Add(item);
                        lvPrestador.Items.Add(item);
                    }
                    else if (dt.Rows[i].ItemArray[1].ToString() != "")
                    {
                        item.SubItems.Add(dt.Rows[i].ItemArray[1].ToString());
                        groupClinHosp.Items.Add(item);
                        lvPrestador.Items.Add(item);
                    }
                }
            }
        }

        /// <summary>
        /// Carrega Operadoras Cadastradas na guia de Operadoras
        /// </summary>
        private void carregaOpCadastradas()
        {
            DataTable dt = CommandModConf.selecionaOpCadastradas();
            //btnExcluirOp.Enabled = false;
            if (dt.Rows.Count > 0)
            {
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    ListViewItem item = new ListViewItem(dt.Rows[i].ItemArray[1].ToString());
                    item.SubItems.Add(dt.Rows[i]["regANS"].ToString());
                    lvOpCadastradas.Items.Add(item);
                }
            }
        }

        /// <summary>
        /// Carrega ListView de Operadoras Filiadas ao Prestador Selecionado na guia de Configurações
        /// </summary>
        public void carregaOperadorasFiliadas()
        {
            lvwConfOperadoras.Items.Clear();
            lvwConfOperadoras.Groups.Clear();
            DataTable dt = CommandModConf.buscaOperadoraFiliada(this.usuarioID);
            if (dt.Rows.Count > 0)
            {
                ListViewGroup groupOpFiliadas = new ListViewGroup("Operadoras Filiadas");
                lvwConfOperadoras.Groups.Add(groupOpFiliadas);
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    ListViewItem item = new ListViewItem(dt.Rows[i]["nome"].ToString());
                    item.SubItems.Add(dt.Rows[i]["regANS"].ToString());
                    item.SubItems.Add(dt.Rows[i]["codnaOperadora"].ToString());
                    item.SubItems.Add(dt.Rows[i]["ID"].ToString());
                    groupOpFiliadas.Items.Add(item);
                    lvwConfOperadoras.Items.Add(item);
                }
            }
            updateConf = false;
            txtCodOp.Text = "";
            txtLoteMax.Text = "";
            txtLoteMin.Text = "";
            gpbIntervaloLote.Enabled = false;
            gpbCodigo.Enabled = false;
            gpbConfOperadora.Enabled = true;
            dgvIntervaloLote.DataSource = null;
            btnConfSalvar.Visible = true;
        }

        /// <summary>
        /// Carrega ListView de Operadoras NÃO filiadas ao Prestador Selecionado na guia de Configurações
        /// </summary>
        private void carregaOpNaoFiliadas()
        {
            lvwConfOperadoras.Items.Clear();
            lvwConfOperadoras.Groups.Clear();
            DataTable dtnf = CommandModConf.buscaOpNaoFiliada(this.usuarioID);
            if (dtnf.Rows.Count > 0)
            {
                ListViewGroup groupOpNaoFiliadas = new ListViewGroup("Operadoras Não Filiadas");
                lvwConfOperadoras.Groups.Add(groupOpNaoFiliadas);
                for (int i = 0; i < dtnf.Rows.Count; i++)
                {
                    ListViewItem itemnf = new ListViewItem(dtnf.Rows[i].ItemArray[0].ToString());
                    itemnf.SubItems.Add(dtnf.Rows[i].ItemArray[1].ToString());
                    groupOpNaoFiliadas.Items.Add(itemnf);
                    lvwConfOperadoras.Items.Add(itemnf);
                }
            }
            updateConf = true;
            gpbIntervaloLote.Enabled = false;
            txtCodOp.Text = "";
            txtLoteMax.Text = "";
            txtLoteMin.Text = "";
            gpbCodigo.Enabled = true;
            rbCPFCNPJ.Checked = true;
            dgvIntervaloLote.DataSource = null;
            btnConfSalvar.Visible = false;
        }
        
        /// <summary>
        /// Carrega o Intervalo de Lotes na Prestadora do Prestador Selecionados na guia Configurações
        /// </summary>
        private void carregaIntervaloLote()
        {
            DataTable dt = CommandModConf.buscaIntervaloLote(Convert.ToInt64(lvwConfOperadoras.Items[lvwConfOperadoras.SelectedIndices[0]].SubItems[3].Text));
            dgvIntervaloLote.DataSource = dt;
            dgvIntervaloLote.Columns[0].Visible = false;
            dgvIntervaloLote.Columns[1].Width = 60;
            dgvIntervaloLote.Columns[2].Width = 60;
            dgvIntervaloLote.Columns[2].Width = 60;
        }

        private void carregaTipoLogradouro()
        {
            ArrayList TiposLogradouro = new ArrayList();

            TiposLogradouro.Add(new AddValue("Acesso", 001));
            TiposLogradouro.Add(new AddValue("Adro", 002));
            TiposLogradouro.Add(new AddValue("Alameda", 004));
            TiposLogradouro.Add(new AddValue("Alto", 005));
            TiposLogradouro.Add(new AddValue("Atalho", 007));
            TiposLogradouro.Add(new AddValue("Avenida", 008));
            TiposLogradouro.Add(new AddValue("Balneário", 009));
            TiposLogradouro.Add(new AddValue("Belvedere", 010));
            TiposLogradouro.Add(new AddValue("Beco", 011));
            TiposLogradouro.Add(new AddValue("Bloco", 012));
            TiposLogradouro.Add(new AddValue("Bosque", 013));
            TiposLogradouro.Add(new AddValue("Boulevard", 014));
            TiposLogradouro.Add(new AddValue("Baixa", 015));
            TiposLogradouro.Add(new AddValue("Cais", 016));
            TiposLogradouro.Add(new AddValue("Caminho", 017));
            TiposLogradouro.Add(new AddValue("Chapadão", 019));
            TiposLogradouro.Add(new AddValue("Conjunto", 020));
            TiposLogradouro.Add(new AddValue("Colônia", 021));
            TiposLogradouro.Add(new AddValue("Corredor", 022));
            TiposLogradouro.Add(new AddValue("Campo", 023));
            TiposLogradouro.Add(new AddValue("Córrego", 024));
            TiposLogradouro.Add(new AddValue("Desvio", 027));
            TiposLogradouro.Add(new AddValue("Distrito", 028));
            TiposLogradouro.Add(new AddValue("Escada", 030));
            TiposLogradouro.Add(new AddValue("Estrada", 031));
            TiposLogradouro.Add(new AddValue("Estação", 032));
            TiposLogradouro.Add(new AddValue("Estádio", 033));
            TiposLogradouro.Add(new AddValue("Favela", 036));
            TiposLogradouro.Add(new AddValue("Fazenda", 037));
            TiposLogradouro.Add(new AddValue("Ferrovia", 038));
            TiposLogradouro.Add(new AddValue("Fonte", 039));
            TiposLogradouro.Add(new AddValue("Feira", 040));
            TiposLogradouro.Add(new AddValue("Forte", 043));
            TiposLogradouro.Add(new AddValue("Galeria", 045));
            TiposLogradouro.Add(new AddValue("Granja", 046));
            TiposLogradouro.Add(new AddValue("Ilha", 050));
            TiposLogradouro.Add(new AddValue("Jardim", 052));
            TiposLogradouro.Add(new AddValue("Ladeira", 053));
            TiposLogradouro.Add(new AddValue("Largo", 054));
            TiposLogradouro.Add(new AddValue("Lagoa", 055));
            TiposLogradouro.Add(new AddValue("Loteamento", 056));
            TiposLogradouro.Add(new AddValue("Morro", 059));
            TiposLogradouro.Add(new AddValue("Monte", 060));
            TiposLogradouro.Add(new AddValue("Paralela", 062));
            TiposLogradouro.Add(new AddValue("Passeio", 063));
            TiposLogradouro.Add(new AddValue("Pátio", 064));
            TiposLogradouro.Add(new AddValue("Praça", 065));
            TiposLogradouro.Add(new AddValue("Parada", 067));
            TiposLogradouro.Add(new AddValue("Praia", 070));
            TiposLogradouro.Add(new AddValue("Prolongamento", 071));
            TiposLogradouro.Add(new AddValue("Parque", 072));
            TiposLogradouro.Add(new AddValue("Passarela", 073));
            TiposLogradouro.Add(new AddValue("Passagem", 074));
            TiposLogradouro.Add(new AddValue("Ponte", 076));
            TiposLogradouro.Add(new AddValue("Quadra", 077));
            TiposLogradouro.Add(new AddValue("Quinta", 079));
            TiposLogradouro.Add(new AddValue("Rua", 081));
            TiposLogradouro.Add(new AddValue("Ramal", 082));
            TiposLogradouro.Add(new AddValue("Recanto", 087));
            TiposLogradouro.Add(new AddValue("Retiro", 088));
            TiposLogradouro.Add(new AddValue("Reta", 089));
            TiposLogradouro.Add(new AddValue("Rodovia", 090));
            TiposLogradouro.Add(new AddValue("Retorno", 091));
            TiposLogradouro.Add(new AddValue("Sítio", 092));
            TiposLogradouro.Add(new AddValue("Servidão", 094));
            TiposLogradouro.Add(new AddValue("Setor", 095));
            TiposLogradouro.Add(new AddValue("Subida", 096));
            TiposLogradouro.Add(new AddValue("Trincheira", 097));
            TiposLogradouro.Add(new AddValue("Terminal", 098));
            TiposLogradouro.Add(new AddValue("Trevo", 099));
            TiposLogradouro.Add(new AddValue("Travessa", 100));
            TiposLogradouro.Add(new AddValue("Via", 101));
            TiposLogradouro.Add(new AddValue("Viaduto", 103));
            TiposLogradouro.Add(new AddValue("Vila", 104));
            TiposLogradouro.Add(new AddValue("Viela", 105));
            TiposLogradouro.Add(new AddValue("Vale", 106));
            TiposLogradouro.Add(new AddValue("Zigue-zague", 108));
            TiposLogradouro.Add(new AddValue("Trecho", 452));
            TiposLogradouro.Add(new AddValue("Vereda", 453));
            TiposLogradouro.Add(new AddValue("Artéria", 465));
            TiposLogradouro.Add(new AddValue("Elevada", 468));
            TiposLogradouro.Add(new AddValue("Porto", 469));
            TiposLogradouro.Add(new AddValue("Balão", 470));
            TiposLogradouro.Add(new AddValue("Paradouro", 471));
            TiposLogradouro.Add(new AddValue("Área", 472));
            TiposLogradouro.Add(new AddValue("Jardinete", 473));
            TiposLogradouro.Add(new AddValue("Esplanada", 474));
            TiposLogradouro.Add(new AddValue("Quintas", 475));
            TiposLogradouro.Add(new AddValue("Rotula", 476));
            TiposLogradouro.Add(new AddValue("Marina", 477));
            TiposLogradouro.Add(new AddValue("Descida", 478));
            TiposLogradouro.Add(new AddValue("Circular", 479));
            TiposLogradouro.Add(new AddValue("Unidade", 480));
            TiposLogradouro.Add(new AddValue("Chácara", 481));
            TiposLogradouro.Add(new AddValue("Rampa", 482));
            TiposLogradouro.Add(new AddValue("Ponta", 483));
            TiposLogradouro.Add(new AddValue("Via de pedestre", 484));
            TiposLogradouro.Add(new AddValue("Condomínio", 485));
            TiposLogradouro.Add(new AddValue("Habitacional", 486));
            TiposLogradouro.Add(new AddValue("Residencial", 487));
            TiposLogradouro.Add(new AddValue("Canal", 495));
            TiposLogradouro.Add(new AddValue("Buraco", 496));
            TiposLogradouro.Add(new AddValue("Módulo", 497));
            TiposLogradouro.Add(new AddValue("Estância", 498));
            TiposLogradouro.Add(new AddValue("Lago", 499));
            TiposLogradouro.Add(new AddValue("Núcleo", 500));
            TiposLogradouro.Add(new AddValue("Aeroporto", 501));
            TiposLogradouro.Add(new AddValue("Passagem Subterrânea", 502));
            TiposLogradouro.Add(new AddValue("Complexo Viário", 503));
            TiposLogradouro.Add(new AddValue("Praça de Esportes", 504));
            TiposLogradouro.Add(new AddValue("Via Elevada", 505));
            TiposLogradouro.Add(new AddValue("Rotatória", 506));
            TiposLogradouro.Add(new AddValue("1ª Travessa", 507));
            TiposLogradouro.Add(new AddValue("2ª Travessa", 508));
            TiposLogradouro.Add(new AddValue("3ª Travessa", 509));
            TiposLogradouro.Add(new AddValue("4ª Travessa", 510));
            TiposLogradouro.Add(new AddValue("5ª Travessa", 511));
            TiposLogradouro.Add(new AddValue("6ª Travessa", 512));
            TiposLogradouro.Add(new AddValue("7ª Travessa", 513));
            TiposLogradouro.Add(new AddValue("8ª Travessa", 514));
            TiposLogradouro.Add(new AddValue("9ª Travessa", 515));
            TiposLogradouro.Add(new AddValue("10ª Travessa", 516));
            TiposLogradouro.Add(new AddValue("11ª Travessa", 517));
            TiposLogradouro.Add(new AddValue("12ª Travessa", 518));
            TiposLogradouro.Add(new AddValue("13ª Travessa", 519));
            TiposLogradouro.Add(new AddValue("14ª Travessa", 520));
            TiposLogradouro.Add(new AddValue("15ª Travessa", 521));
            TiposLogradouro.Add(new AddValue("16ª Travessa", 522));
            TiposLogradouro.Add(new AddValue("1º Alto", 523));
            TiposLogradouro.Add(new AddValue("2º Alto", 524));
            TiposLogradouro.Add(new AddValue("3º Alto", 525));
            TiposLogradouro.Add(new AddValue("4º Alto", 526));
            TiposLogradouro.Add(new AddValue("5º Alto", 527));
            TiposLogradouro.Add(new AddValue("1º Beco", 528));
            TiposLogradouro.Add(new AddValue("2º Beco", 529));
            TiposLogradouro.Add(new AddValue("3º Beco", 530));
            TiposLogradouro.Add(new AddValue("4º Beco", 531));
            TiposLogradouro.Add(new AddValue("5º Beco", 532));
            TiposLogradouro.Add(new AddValue("1ª Paralela", 533));
            TiposLogradouro.Add(new AddValue("2ª Paralela", 534));
            TiposLogradouro.Add(new AddValue("3ª Paralela", 535));
            TiposLogradouro.Add(new AddValue("4ª Paralela", 536));
            TiposLogradouro.Add(new AddValue("5ª Paralela", 537));
            TiposLogradouro.Add(new AddValue("1ª Subida", 538));
            TiposLogradouro.Add(new AddValue("2ª Subida", 539));
            TiposLogradouro.Add(new AddValue("3ª Subida", 540));
            TiposLogradouro.Add(new AddValue("4ª Subida", 541));
            TiposLogradouro.Add(new AddValue("5ª Subida", 542));
            TiposLogradouro.Add(new AddValue("6ª Subida", 543));
            TiposLogradouro.Add(new AddValue("1ª Vila", 544));
            TiposLogradouro.Add(new AddValue("2ª Vila", 545));
            TiposLogradouro.Add(new AddValue("3ª Vila", 546));
            TiposLogradouro.Add(new AddValue("4ª Vila", 547));
            TiposLogradouro.Add(new AddValue("5ª Vila", 548));
            TiposLogradouro.Add(new AddValue("1º Parque", 549));
            TiposLogradouro.Add(new AddValue("2º Parque", 550));
            TiposLogradouro.Add(new AddValue("3º Parque", 551));
            TiposLogradouro.Add(new AddValue("1ª Rua", 552));
            TiposLogradouro.Add(new AddValue("2ª Rua", 553));
            TiposLogradouro.Add(new AddValue("3ª Rua", 554));
            TiposLogradouro.Add(new AddValue("4ª Rua", 555));
            TiposLogradouro.Add(new AddValue("5ª Rua", 556));
            TiposLogradouro.Add(new AddValue("6ª Rua", 557));
            TiposLogradouro.Add(new AddValue("7ª Rua", 558));
            TiposLogradouro.Add(new AddValue("8ª Rua", 559));
            TiposLogradouro.Add(new AddValue("9ª Rua", 560));
            TiposLogradouro.Add(new AddValue("10ª Rua", 561));
            TiposLogradouro.Add(new AddValue("11ª Rua", 562));
            TiposLogradouro.Add(new AddValue("12ª Rua", 563));
            TiposLogradouro.Add(new AddValue("Estacionamento", 564));
            TiposLogradouro.Add(new AddValue("Vala", 565));
            TiposLogradouro.Add(new AddValue("Rua de Pedestre", 566));
            TiposLogradouro.Add(new AddValue("Túnel", 567));
            TiposLogradouro.Add(new AddValue("Variante", 568));
            TiposLogradouro.Add(new AddValue("Rodo Anel", 569));
            TiposLogradouro.Add(new AddValue("Travessa Particular", 570));
            TiposLogradouro.Add(new AddValue("Calçada ", 571));
            TiposLogradouro.Add(new AddValue("Via de Acesso", 572));
            TiposLogradouro.Add(new AddValue("Entrada Particular", 573));
            TiposLogradouro.Add(new AddValue("Acampamento", 645));
            TiposLogradouro.Add(new AddValue("Via Expressa", 646));
            TiposLogradouro.Add(new AddValue("Estrada Municipal", 650));
            TiposLogradouro.Add(new AddValue("Avenida Contorno", 651));
            TiposLogradouro.Add(new AddValue("Entre-quadra", 652));
            TiposLogradouro.Add(new AddValue("Rua de Ligação", 653));
            TiposLogradouro.Add(new AddValue("Área Especial", 654));
            this.cbbTipoLogr.DataSource = TiposLogradouro;
            this.cbbTipoLogr.DisplayMember = "Display";
            this.cbbTipoLogr.ValueMember = "Value";
            this.cbbTipoLogr.SelectedValue = -1;
        }

        private void carregaCBOS()
        {
            ArrayList TiposCBOS = new ArrayList();
            TiposCBOS.Add(new AddValue("01280- Físico nuclear", 01280));
            TiposCBOS.Add(new AddValue("03370- Técnico de saneamento", 03370));
            TiposCBOS.Add(new AddValue("04945- Pedagogo", 04945));
            TiposCBOS.Add(new AddValue("05110- Biologista em geral (biólogo biomédico)", 05110));
            TiposCBOS.Add(new AddValue("05230- Bioquímico", 05230));
            TiposCBOS.Add(new AddValue("05250- Bacteriologista", 05250));
            TiposCBOS.Add(new AddValue("05290- Outros bacteriologistas e trabalhadores assemelhados", 05290));
            TiposCBOS.Add(new AddValue("06105- Médico em geral (clinico geral)", 06105));
            TiposCBOS.Add(new AddValue("06110- Médico cirurgião em geral", 06110));
            TiposCBOS.Add(new AddValue("06112- Médico cirurgião pediátrico", 06112));
            TiposCBOS.Add(new AddValue("06113- Médico de perícias médicas", 06113));
            TiposCBOS.Add(new AddValue("06114- Médico anatomopatologista", 06114));
            TiposCBOS.Add(new AddValue("06115- Médico anestesista", 06115));
            TiposCBOS.Add(new AddValue("06116- Médico broncoesofalogista", 06116));
            TiposCBOS.Add(new AddValue("06117- Médico cardiologista", 06117));
            TiposCBOS.Add(new AddValue("06118- Médico cirurgião vascular", 06118));
            TiposCBOS.Add(new AddValue("06119- Médico dermatologista", 06119));
            TiposCBOS.Add(new AddValue("06120- Médico cirurgião cardiovascular", 06120));
            TiposCBOS.Add(new AddValue("06121- Médico oncologista pediátrico", 06121));
            TiposCBOS.Add(new AddValue("06122- Médico do trabalho", 06122));
            TiposCBOS.Add(new AddValue("06123- Médico gastroenterologista", 06123));
            TiposCBOS.Add(new AddValue("06124- Médico hematologista", 06124));
            TiposCBOS.Add(new AddValue("06125- Médico endocrinologista", 06125));
            TiposCBOS.Add(new AddValue("06126- Médico nuclear", 06126));
            TiposCBOS.Add(new AddValue("06127- Médico endoscopista", 06127));
            TiposCBOS.Add(new AddValue("06128- Médico fisiatra", 06128));
            TiposCBOS.Add(new AddValue("06129- Médico oncologista clinico", 06129));
            TiposCBOS.Add(new AddValue("06130- Médico reumatologista", 06130));
            TiposCBOS.Add(new AddValue("06131- Médico neurocirurgião", 06131));
            TiposCBOS.Add(new AddValue("06132- Médico ginecologista", 06132));
            TiposCBOS.Add(new AddValue("06133- Médico alergista/imunologista", 06133));
            TiposCBOS.Add(new AddValue("06134- Médico geriatra", 06134));
            TiposCBOS.Add(new AddValue("06135- Médico hemoterapeuta", 06135));
            TiposCBOS.Add(new AddValue("06136- Médico hansenologista", 06136));
            TiposCBOS.Add(new AddValue("06137- Médico legista", 06137));
            TiposCBOS.Add(new AddValue("06138- Médico nefrologista", 06138));
            TiposCBOS.Add(new AddValue("06139- Médico mastologista", 06139));
            TiposCBOS.Add(new AddValue("06140- Médico sanitarista", 06140));
            TiposCBOS.Add(new AddValue("06141- Médico de saúde da família", 06141));
            TiposCBOS.Add(new AddValue("06142- Médico neurologista", 06142));
            TiposCBOS.Add(new AddValue("06143- Médico geneticista clinico", 06143));
            TiposCBOS.Add(new AddValue("06144- Médico infectologista", 06144));
            TiposCBOS.Add(new AddValue("06145- Médico obstetra", 06145));
            TiposCBOS.Add(new AddValue("06146- Médico cirurgião de cabeça e pescoço", 06146));
            TiposCBOS.Add(new AddValue("06147- Médico oftalmologista", 06147));
            TiposCBOS.Add(new AddValue("06148- Médico homeopata", 06148));
            TiposCBOS.Add(new AddValue("06149- Médico ginecologista / obstetra", 06149));
            TiposCBOS.Add(new AddValue("06150- Médico ortopedista", 06150));
            TiposCBOS.Add(new AddValue("06151- Médico geral comunitário", 06151));
            TiposCBOS.Add(new AddValue("06152- Médico otorrinolaringologista", 06152));
            TiposCBOS.Add(new AddValue("06153- Médico citopatologista", 06153));
            TiposCBOS.Add(new AddValue("06154- Médico cirurgião torácico", 06154));
            TiposCBOS.Add(new AddValue("06155- Médico pediatra", 06155));
            TiposCBOS.Add(new AddValue("06156- Médico ultrasonografista", 06156));
            TiposCBOS.Add(new AddValue("06157- Médico pneumotisiologista", 06157));
            TiposCBOS.Add(new AddValue("06158- Médico acupunturista", 06158));
            TiposCBOS.Add(new AddValue("06159- Médico cancerologista", 06159));
            TiposCBOS.Add(new AddValue("06160- Médico proctologista", 06160));
            TiposCBOS.Add(new AddValue("06161- Médico cirurgião de mão", 06161));
            TiposCBOS.Add(new AddValue("06162- Médico psiquiatra", 06162));
            TiposCBOS.Add(new AddValue("06163- Médico cirurgião do aparelho digestivo", 06163));
            TiposCBOS.Add(new AddValue("06164- Médico plantonista", 06164));
            TiposCBOS.Add(new AddValue("06165- Médico radiologista", 06165));
            TiposCBOS.Add(new AddValue("06166- Médico intensivista", 06166));
            TiposCBOS.Add(new AddValue("06167- Médico radioterapeuta", 06167));
            TiposCBOS.Add(new AddValue("06168- Médico oncologista cirúrgico", 06168));
            TiposCBOS.Add(new AddValue("06170- Médico urologista", 06170));
            TiposCBOS.Add(new AddValue("06172- Médico patologista clinico", 06172));
            TiposCBOS.Add(new AddValue("06175- Médico angiologista", 06175));
            TiposCBOS.Add(new AddValue("06177- Médico de medicina esportiva", 06177));
            TiposCBOS.Add(new AddValue("06180- Médico cirurgião plástico", 06180));
            TiposCBOS.Add(new AddValue("06190- Outros médicos", 06190));
            TiposCBOS.Add(new AddValue("06310- Cirurgião dentista em geral", 06310));
            TiposCBOS.Add(new AddValue("06330- Cirurgião dentista (saúde pública)", 06330));
            TiposCBOS.Add(new AddValue("06335- Cirurgião dentista (traumatologia buco maxilo facial)", 06335));
            TiposCBOS.Add(new AddValue("06340- Cirurgião dentista (endodontia)", 06340));
            TiposCBOS.Add(new AddValue("06345- Cirurgião dentista (ortodontia)", 06345));
            TiposCBOS.Add(new AddValue("06350- Cirurgião dentista (patologia bucal)", 06350));
            TiposCBOS.Add(new AddValue("06355- Cirurgião dentista (pediatria)", 06355));
            TiposCBOS.Add(new AddValue("06360- Cirurgião dentista (prótese)", 06360));
            TiposCBOS.Add(new AddValue("06365- Cirurgião dentista (radiologia)", 06365));
            TiposCBOS.Add(new AddValue("06370- Cirurgião dentista (periodontia)", 06370));
            TiposCBOS.Add(new AddValue("06510- Médico veterinário em geral", 06510));
            TiposCBOS.Add(new AddValue("06540- Zootecnista", 06540));
            TiposCBOS.Add(new AddValue("06710- Farmacêutico em geral", 06710));
            TiposCBOS.Add(new AddValue("06810- Nutricionista em geral", 06810));
            TiposCBOS.Add(new AddValue("07110- Enfermeiro, em geral", 07110));
            TiposCBOS.Add(new AddValue("07111- Enfermeiro do PACS", 07111));
            TiposCBOS.Add(new AddValue("07112- Enfermeiro do PSF", 07112));
            TiposCBOS.Add(new AddValue("07130- Enfermeiro sanitarista", 07130));
            TiposCBOS.Add(new AddValue("07140- Enfermeiro do trabalho", 07140));
            TiposCBOS.Add(new AddValue("07145- Enfermeiro obstetra", 07145));
            TiposCBOS.Add(new AddValue("07150- Enfermeiro de centro cirúrgico", 07150));
            TiposCBOS.Add(new AddValue("07155- Enfermeiro de terapia intensiva", 07155));
            TiposCBOS.Add(new AddValue("07160- Enfermeiro peuricultor e pediátrico", 07160));
            TiposCBOS.Add(new AddValue("07165- Enfermeiro psiquiátrico", 07165));
            TiposCBOS.Add(new AddValue("07210- Técnico de enfermagem em geral", 07210));
            TiposCBOS.Add(new AddValue("07215- Técnico de enfermagem do trabalho", 07215));
            TiposCBOS.Add(new AddValue("07220- Técnico de enfermagem de terapia intensiva", 07220));
            TiposCBOS.Add(new AddValue("07230- Técnico de enfermagem psiquiátrica", 07230));
            TiposCBOS.Add(new AddValue("07231- Fiscal sanitário", 07231));
            TiposCBOS.Add(new AddValue("07234- Técnico em vigilância sanitária", 07234));
            TiposCBOS.Add(new AddValue("07236- Técnico em reabilitação", 07236));
            TiposCBOS.Add(new AddValue("07238- Técnico em equipamento médico-hospitalar", 07238));
            TiposCBOS.Add(new AddValue("07290- Técnico de enfermagem do PSF", 07290));
            TiposCBOS.Add(new AddValue("07310- Assistente social em geral", 07310));
            TiposCBOS.Add(new AddValue("07410- Psicólogo em geral", 07410));
            TiposCBOS.Add(new AddValue("07525- Ortoptista", 07525));
            TiposCBOS.Add(new AddValue("07530- Ótico", 07530));
            TiposCBOS.Add(new AddValue("07550- Técnico em orientação e mobilidade de cegos e deficientes visuais", 07550));
            TiposCBOS.Add(new AddValue("07620- Fisioterapeuta", 07620));
            TiposCBOS.Add(new AddValue("07630- Terapeuta ocupacional", 07630));
            TiposCBOS.Add(new AddValue("07690- Terapeutas em geral (outros terapeutas)", 07690));
            TiposCBOS.Add(new AddValue("07720- Operador de raio-x", 07720));
            TiposCBOS.Add(new AddValue("07730- Operador de eletrocardiógrafo", 07730));
            TiposCBOS.Add(new AddValue("07740- Operador de eletroencefalografo", 07740));
            TiposCBOS.Add(new AddValue("07790- Outros operadores de equipamentos médicos e odontológicos", 07790));
            TiposCBOS.Add(new AddValue("07914- Foniatra", 07914));
            TiposCBOS.Add(new AddValue("07915- Acupunturista", 07915));
            TiposCBOS.Add(new AddValue("07925- Fonoaudiólogo", 07925));
            TiposCBOS.Add(new AddValue("07935- Técnico de higiene dental", 07935));
            TiposCBOS.Add(new AddValue("07945- Quiropata", 07945));
            TiposCBOS.Add(new AddValue("07946- Técnico em laboratório", 07946));
            TiposCBOS.Add(new AddValue("07948- Técnico de radiologia", 07948));
            TiposCBOS.Add(new AddValue("07950- Técnico de ortopedia", 07950));
            TiposCBOS.Add(new AddValue("19998- Outros profissionais de nível superior", 19998));
            TiposCBOS.Add(new AddValue("19999- Outros profissionais de nível técnico e médio", 19999));
            TiposCBOS.Add(new AddValue("31120- Agente Administrativo", 31120));
            TiposCBOS.Add(new AddValue("31122- Auxiliar administrativo", 31122));
            TiposCBOS.Add(new AddValue("57210- Auxiliar de enfermagem", 57210));
            TiposCBOS.Add(new AddValue("57216- Auxiliar de enfermagem no PSF", 57216));
            TiposCBOS.Add(new AddValue("57220- Atendente de enfermagem", 57220));
            TiposCBOS.Add(new AddValue("57232- Agente de vigilância sanitária", 57232));
            TiposCBOS.Add(new AddValue("57233- Agente de saneamento", 57233));
            TiposCBOS.Add(new AddValue("57235- Guarda de endemias/Agente de zoonoses/Agente de controle de vetores", 57235));
            TiposCBOS.Add(new AddValue("57260- Parteira", 57260));
            TiposCBOS.Add(new AddValue("57275- Auxiliar de análises clínicas", 57275));
            TiposCBOS.Add(new AddValue("57280- Socorrista habilitado", 57280));
            TiposCBOS.Add(new AddValue("57282- Agente comunitário", 57282));
            TiposCBOS.Add(new AddValue("99999- Outros profissionais não classificáveis nessa tabela", 99999));
            this.cbbCBOS.DataSource = TiposCBOS;
            this.cbbCBOS.DisplayMember = "Display";
            this.cbbCBOS.ValueMember = "Value";
            this.cbbCBOS.SelectedValue = -1;
        }
        #endregion

        #region Eventos Prestador

        private void limpaCamposPrestador()
        {
            foreach (Control ctrl in this.gpbNovoPrestador.Controls)
            {
                if (ctrl is TextBox)
                    ctrl.Text = "";
            }
            txtCEP.Text = "";
            cbbTipoLogr.SelectedValue = -1;
            cbbUF.SelectedIndex = -1;
            cbbCBOS.SelectedValue = -1;
            txtNumCons.Text = "";
            txtCPF.Text = "";
            cbbUFCons.SelectedIndex = -1;
            cbbSiglaConselho.SelectedIndex = -1;
            txtCNES.Text = "";
            txtCNPJ.Text = "";
            rbtProfissional.Checked = false;
            rbtHospClin.Checked = false;
            gpbHospClinica.Visible = false;
            gpbProfissional.Visible = false;
        }

        private void rbHospClin_CheckedChanged(object sender, EventArgs e)
        {
            gpbHospClinica.Visible = true;
            gpbProfissional.Visible = false;
            txtCPF.Text = "";
            txtNumCons.Text = "";
            cbbUFCons.SelectedIndex = -1;
            cbbSiglaConselho.SelectedIndex = -1;
        }

        private void rbProfissional_CheckedChanged(object sender, EventArgs e)
        {
            gpbProfissional.Visible = true;
            gpbHospClinica.Visible = false;
            txtCNES.Text = "";
            txtCNPJ.Text = "";
        }

        private void btnNovoPres_Click(object sender, EventArgs e)
        {
            updatePres = false;
            btnNovoPrestador.Enabled = false;
            btnSalvarPrestador.Enabled = true;
            btnExcluirPrestador.Enabled = false;
            gpbNovoPrestador.Enabled = true;
            gpbProfHosp.Enabled = true;
            rbtProfissional.Checked = false;
            rbtHospClin.Checked = false;
            btnLogin.Enabled = false;
            btnCancelarPrestador.Enabled = true;
            this.limpaCamposPrestador();
        }

        private void botoesSalvarPrestador()
        {
            btnNovoPrestador.Enabled = true;
            btnSalvarPrestador.Enabled = false;
            btnExcluirPrestador.Enabled = false;
            gpbNovoPrestador.Enabled = false;
            gpbProfHosp.Enabled = false;
            btnLogin.Enabled = false;
            btnCancelarPrestador.Enabled = false;
            this.carregaPrestadores();
            this.limpaCamposPrestador();
        }

        private void inserePrestador(TipoPrestador p, int judiciario)
        {
            string tipologradouro = "";
            string tipoCBOS = "";
            long IDUsuario = 0;
            if (cbbTipoLogr.SelectedValue != null)
            {
                tipologradouro = cbbTipoLogr.SelectedValue.ToString();
                tipologradouro = tipologradouro.PadLeft(3, '0');
            }
            if (cbbCBOS.SelectedValue != null)
            {
                tipoCBOS = cbbCBOS.SelectedValue.ToString();
                tipoCBOS = tipoCBOS.PadLeft(5, '0');
            }
            if (p == TipoPrestador.Profissional)
            {
                IDUsuario = CommandModConf.inserePrestador(txtNomePres.Text, tipologradouro, txtLogradouro.Text, txtNumero.Text,
                    txtComplemento.Text, txtcodIBGE.Text, txtMunicipio.Text,Convert.ToString(cbbUF.SelectedItem), txtCEP.Text,
                    Convert.ToString(cbbSiglaConselho.SelectedItem), txtNumCons.Text,Convert.ToString(cbbUFCons.SelectedItem), txtCPF.Text, tipoCBOS ,judiciario );
            }
            else
            {
                IDUsuario = CommandModConf.inserePrestador(txtNomePres.Text, tipologradouro, txtLogradouro.Text, txtNumero.Text,
                    txtComplemento.Text, txtcodIBGE.Text, txtMunicipio.Text,Convert.ToString(cbbUF.SelectedItem), txtCEP.Text,
                    txtCNES.Text, txtCNPJ.Text);
            }
            uc_CriarLogin criarLogin = new uc_CriarLogin(IDUsuario);
            Globals.ThisAddIn.CriarLoginCTP = Globals.ThisAddIn.CustomTaskPanes.Add(criarLogin, "Cadastro Login");
            Globals.ThisAddIn.CriarLoginCTP.DockPosition = Microsoft.Office.Core.MsoCTPDockPosition.msoCTPDockPositionFloating;
            Globals.ThisAddIn.CriarLoginCTP.Width = 185;
            Globals.ThisAddIn.CriarLoginCTP.Height = 270;
            Globals.ThisAddIn.CriarLoginCTP.Visible = true;
            this.botoesSalvarPrestador();
        }

        private void updatePrestador(TipoPrestador p, bool troca, int judiciario)
        {
            if (MessageBox.Show("Deseja alterar este Prestador?", "Aviso!",
                MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) == DialogResult.Yes)
            {
                string tipologradouro = "000";
                string tipoCBOS = "00000";
                if (cbbTipoLogr.SelectedValue != null)
                {
                    tipologradouro = cbbTipoLogr.SelectedValue.ToString();
                    tipologradouro = tipologradouro.PadLeft(3, '0');
                }
                if (cbbCBOS.SelectedValue != null)
                {
                    tipoCBOS = cbbCBOS.SelectedValue.ToString();
                    tipoCBOS = tipoCBOS.PadLeft(5, '0');
                }
                if (p == TipoPrestador.Profissional)
                {
                    if (troca)
                    {
                        CommandModConf.trocaParaProfissional(this.IDPrestador, txtNomePres.Text, tipologradouro, txtLogradouro.Text, txtNumero.Text,
                            txtComplemento.Text, txtcodIBGE.Text, txtMunicipio.Text,Convert.ToString(cbbUF.SelectedItem), txtCEP.Text,
                            Convert.ToString(cbbSiglaConselho.SelectedItem), txtNumCons.Text,Convert.ToString(cbbUFCons.SelectedItem), txtCPF.Text,tipoCBOS,judiciario);
                    }
                    else
                    {
                        CommandModConf.updatePrestador(this.IDPrestador, txtNomePres.Text, tipologradouro, txtLogradouro.Text, txtNumero.Text,
                            txtComplemento.Text, txtcodIBGE.Text, txtMunicipio.Text,Convert.ToString(cbbUF.SelectedItem), txtCEP.Text,
                            Convert.ToString(cbbSiglaConselho.SelectedItem), txtNumCons.Text,Convert.ToString(cbbUFCons.SelectedItem), txtCPF.Text , tipoCBOS, judiciario);
                    }
                }
                else
                {
                    if (troca)
                    {
                        
                        CommandModConf.trocaParaHospClin(this.IDPrestador, txtNomePres.Text, tipologradouro, txtLogradouro.Text, txtNumero.Text,
                            txtComplemento.Text, txtcodIBGE.Text, txtMunicipio.Text,Convert.ToString(cbbUF.SelectedItem), txtCEP.Text,
                            txtCNES.Text, txtCNPJ.Text);
                    }
                    else
                    {                        
                        CommandModConf.updatePrestador(this.IDPrestador, txtNomePres.Text, tipologradouro, txtLogradouro.Text, txtNumero.Text,
                            txtComplemento.Text, txtcodIBGE.Text, txtMunicipio.Text,Convert.ToString(cbbUF.SelectedItem), txtCEP.Text,
                            txtCNES.Text, txtCNPJ.Text);
                    }
                }
            }
            this.botoesSalvarPrestador();
        }

        private void btnSalvarPres_Click(object sender, EventArgs e)
        {
            int judiciario = 0;
            if (txtNomePres.Text == "")
                MessageBox.Show(txtNomePres, "Nome obrigatório");
            else if (cbbUF.SelectedItem == null || cbbTipoLogr.SelectedItem == null ||
                txtLogradouro.Text == "" || txtNumero.Text == "" || txtCEP.Text == "" ||
                txtcodIBGE.Text == "")
                MessageBox.Show(txtNomePres, "Todos os dados referente ao Endereço devem ser preenchidos!");
            //Verifica se Prestador eh um Profissional
            else if (rbtProfissional.Checked)
            {
                if (txtNumCons.Text == "" || txtCPF.Text == "" ||
                    cbbSiglaConselho.SelectedItem == null || cbbUFCons.SelectedItem == null)
                    MessageBox.Show(txtNomePres, "Todos os dados Profissionais devem ser preenchidos!");
                else
                {
                    if(txtCPF.Text.Length == 11 || txtCPF.Text.Length == 14)
                    {
                        if (txtCPF.Text.Length == 14)
                            judiciario = 1;
                        if (updatePres)
                        {
                            if (tipoPrestador == TipoPrestador.Profissional)
                            {                                
                                
                                this.updatePrestador(TipoPrestador.Profissional, false, judiciario);                                
                            }
                            else
                            {
                                this.updatePrestador(TipoPrestador.Profissional, true, judiciario);
                            }
                        }
                        else
                        {
                            this.inserePrestador(TipoPrestador.Profissional, judiciario);
                        }
                    }
                    else
                        MessageBox.Show("Formato CPF/CNPJ inválido");
                }
            }
            //Verifica se Prestador eh um Hospital/Clinica
            else if (rbtHospClin.Checked)
            {
                if (txtCNES.Text == "" || txtCNPJ.Text == "")
                    MessageBox.Show(txtNomePres, "Todos os dados Profissionais devem ser preenchidos!");
                else
                {
                    if (updatePres)
                    {
                        if (txtCNPJ.Text.Length == 14)
                            judiciario = 1;
                        if (tipoPrestador == TipoPrestador.Hospital_Clinica)
                        {
                            this.updatePrestador(TipoPrestador.Hospital_Clinica, false, judiciario);
                        }
                        else
                        {
                            this.updatePrestador(TipoPrestador.Hospital_Clinica, true, judiciario);
                        }
                    }
                    else
                    {
                        this.inserePrestador(TipoPrestador.Hospital_Clinica,judiciario);
                    }
                }
            }
            else
                MessageBox.Show(gpbHospClinica, "Selecione um Tipo de Prestador!");
        }

        private void btnExcluirProf_Click(object sender, EventArgs e)
        {
            if (lvPrestador.SelectedItems.Count > 0)
            {
                long codigoPrestador = Convert.ToInt64(lvPrestador.Items[lvPrestador.SelectedIndices[0]].SubItems[1].Text);
                //Verifica se este Prestador está vinculado a alguma Operadora
                if (CommandModConf.buscaOperadoraFiliada(codigoPrestador).Rows.Count <= 0)
                {
                    if (MessageBox.Show("Deseja excluir este prestador?",
                            "Mensagem", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                    {
                        CommandModConf.excluirPrestador(codigoPrestador);
                        MessageBox.Show("Prestador Excluído");
                        this.botoesSalvarPrestador();
                    }
                }
                else
                    MessageBox.Show(lvPrestador, "Este Prestador está vinculado a alguma Operadora, " +
                        "\n Exclua Todos os vínculos com Operadoras antes!",
                        "Aviso!", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            else
                MessageBox.Show(lvPrestador, "Selecione um Prestador!",
                                     "Aviso!", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }

        private void lvPrestador_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (lvPrestador.SelectedItems.Count > 0)
            {
                this.limpaCamposPrestador();
                btnSalvarPrestador.Enabled = true;
                btnExcluirPrestador.Enabled = true;
                btnLogin.Enabled = true;
                btnNovoPrestador.Enabled = true;
                gpbNovoPrestador.Enabled = true;
                gpbProfHosp.Enabled = true;
                btnCancelarPrestador.Enabled = true;
                this.IDPrestador = Convert.ToInt64(lvPrestador.Items[lvPrestador.SelectedIndices[0]].SubItems[1].Text);
                DataSet dsDadosPrestador = CommandModConf.buscaPrestador(this.IDPrestador);
                switch (lvPrestador.SelectedItems[0].Group.Header)
                {
                    case "Clínica/Hospitais":
                        rbtHospClin.Checked = true;
                        tipoPrestador = TipoPrestador.Hospital_Clinica;
                        break;
                    case "Profissionais":
                        cbbCBOS.SelectedValue = Convert.ToInt32(dsDadosPrestador.Tables[0].Rows[0]["CBOS"].ToString());
                        rbtProfissional.Checked = true;
                        tipoPrestador = TipoPrestador.Profissional;
                        break;
                }
                updatePres = true;
                txtNomePres.Text = dsDadosPrestador.Tables[0].Rows[0]["nome"].ToString();
                cbbTipoLogr.SelectedValue = Convert.ToInt32(dsDadosPrestador.Tables[0].Rows[0]["tipoLogradouro"].ToString());
                txtLogradouro.Text = dsDadosPrestador.Tables[0].Rows[0]["logradouro"].ToString();
                txtNumero.Text = dsDadosPrestador.Tables[0].Rows[0]["numero"].ToString();
                txtComplemento.Text = dsDadosPrestador.Tables[0].Rows[0]["complemento"].ToString();
                txtcodIBGE.Text = dsDadosPrestador.Tables[0].Rows[0]["codIBGEMun"].ToString();
                txtMunicipio.Text = dsDadosPrestador.Tables[0].Rows[0]["municipio"].ToString();
                cbbUF.SelectedItem = dsDadosPrestador.Tables[0].Rows[0]["codUF"].ToString();
                txtCEP.Text = dsDadosPrestador.Tables[0].Rows[0]["CEP"].ToString();
                txtCNES.Text = dsDadosPrestador.Tables[0].Rows[0]["CNES"].ToString();
                txtCNPJ.Text = dsDadosPrestador.Tables[0].Rows[0]["CNPJ"].ToString();                
                cbbSiglaConselho.SelectedItem = dsDadosPrestador.Tables[0].Rows[0]["siglaConselho"].ToString();
                txtNumCons.Text = dsDadosPrestador.Tables[0].Rows[0]["numeroConselho"].ToString();
                cbbUFCons.SelectedItem = dsDadosPrestador.Tables[0].Rows[0]["ufConselho"].ToString();
                txtCPF.Text = dsDadosPrestador.Tables[0].Rows[0]["CPF"].ToString();
            }
        }

        private void btnCancelarPrestador_Click(object sender, EventArgs e)
        {
            btnNovoPrestador.Enabled = true;
            btnCancelarPrestador.Enabled = false;
            btnExcluirPrestador.Enabled = false;
            btnSalvarPrestador.Enabled = false;
            gpbNovoPrestador.Enabled = false;
            gpbProfHosp.Enabled = false;
            btnLogin.Enabled = false;
            this.limpaCamposPrestador();
        }

        private void btnLogin_Click(object sender, EventArgs e)
        {
            uc_CriarLogin criarLogin;
            DataSet ds = CommandModConf.buscaUsuario(this.IDPrestador);
            if (ds.Tables[0].Rows.Count > 0)
                criarLogin = new uc_CriarLogin(ds.Tables[0].Rows[0]["Usuario"].ToString(), this.IDPrestador);
            else
                criarLogin = new uc_CriarLogin(this.IDPrestador);
            Globals.ThisAddIn.CriarLoginCTP = Globals.ThisAddIn.CustomTaskPanes.Add(criarLogin, "Cadastro Login");
            Globals.ThisAddIn.CriarLoginCTP.DockPosition = Microsoft.Office.Core.MsoCTPDockPosition.msoCTPDockPositionFloating;
            Globals.ThisAddIn.CriarLoginCTP.Width = 185;
            Globals.ThisAddIn.CriarLoginCTP.Height = 270;
            Globals.ThisAddIn.CriarLoginCTP.Visible = true;
        }

        #endregion

        #region Eventos Operadoras

        private void limpaCamposOp()
        {
            foreach (Control ctrl in this.gpbOperadora.Controls)
            {
                if (ctrl is TextBox)
                    ctrl.Text = "";
                else if (ctrl is MaskedTextBox)
                    ctrl.Text = "";
            }
            pbxLogo.Image = null;
        }

        /// <summary>
        /// Insere as URLs no BD
        /// </summary>
        private void insereURLs()
        {
            if (txtUrlCancelaGuia.Text != "")
                CommandModConf.insertURL(txtRegANS.Text, 1, txtUrlCancelaGuia.Text);
            if (txtUrlLoteGuia.Text != "")
                CommandModConf.insertURL(txtRegANS.Text, 2, txtUrlLoteGuia.Text);
            if (txtUrlDemonstrativoRetorno.Text != "")
                CommandModConf.insertURL(txtRegANS.Text, 3, txtUrlDemonstrativoRetorno.Text);
            if (txtUrlSolicitacaoProcedimento.Text != "")
                CommandModConf.insertURL(txtRegANS.Text, 4, txtUrlSolicitacaoProcedimento.Text);
            if (txtUrlStatusProtocolo.Text != "")
                CommandModConf.insertURL(txtRegANS.Text, 5, txtUrlStatusProtocolo.Text);
            if (txtUrlStatusAutorizacao.Text != "")
                CommandModConf.insertURL(txtRegANS.Text, 6, txtUrlStatusAutorizacao.Text);
        }

        private void btnNovo_Click(object sender, EventArgs e)
        {
            gpbOperadora.Enabled = true;
            updateOp = false;
            btnSalvarOp.Enabled = true;
            btnExcluirOp.Enabled = false;
            btnNovoOp.Enabled = false;
            btnCancelarOp.Enabled = true;
            this.limpaCamposOp();
        }

        private void btnSalvar_Click(object sender, EventArgs e)
        {
            if (txtRegANS.Text.Contains("_"))
                MessageBox.Show(txtRegANS, "Registro ANS deve ter 6 dígitos");
            else if (txtNome.Text == "")
                MessageBox.Show(txtNome, "O Nome deve ser Preenchido!");
            else
            {
                MemoryStream str = new MemoryStream();
                if (pbxLogo.Image != null)
                    pbxLogo.Image.Save(str, ImageFormat.Png);
                byte[] br = str.ToArray();

                if (updateOp)
                {
                    if (MessageBox.Show("Deseja alterar esta Operadora?",
                         "Mensagem", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                    {
                        if ((CommandModConf.buscarOperadora(txtRegANS.Text).Tables[0].Rows.Count == 0) || (oldRegANS == txtRegANS.Text))
                        {
                            CommandModConf.updateOperadora(txtRegANS.Text, oldRegANS, txtNome.Text, br);
                            CommandModConf.deleteURL(txtRegANS.Text);
                            this.insereURLs();
                            MessageBox.Show("Cadastro alterado");
                            this.btnOperadoraOperacaoConcluido();
                        }
                        else
                        {
                            MessageBox.Show("Alguma Operadora ja utiliza este Registro ANS!", "Aviso!",
                                MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                        }
                    }
                }
                else
                {
                    if (CommandModConf.buscarOperadora(txtRegANS.Text).Tables[0].Rows.Count == 0)
                    {
                        CommandModConf.incluirOperadora(txtRegANS.Text, txtNome.Text, br);
                        this.insereURLs();
                        MessageBox.Show("Cadastro efetuado");
                        this.btnOperadoraOperacaoConcluido();
                    }
                    else
                    {
                        MessageBox.Show("Alguma Operadora ja utiliza este Registro ANS!", "Aviso!",
                            MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    }
                }
            }
        }

        private void btnOperadoraOperacaoConcluido()
        {
            this.limpaCamposOp();
            lvOpCadastradas.Items.Clear();
            this.carregaOpCadastradas();
            gpbOperadora.Enabled = false;
            btnSalvarOp.Enabled = false;
            btnCancelarOp.Enabled = false;
            btnNovoOp.Enabled = true;
            btnExcluirOp.Enabled = false;
        }

        private void btnExcluir_Click(object sender, EventArgs e)
        {
            if (lvOpCadastradas.SelectedIndices.Count > 0)
            {
                string codigoOperadora = lvOpCadastradas.Items[lvOpCadastradas.SelectedIndices[0]].SubItems[1].Text;
                if (CommandModConf.buscaPrestadorFiliado(codigoOperadora).Rows.Count <= 0)
                {
                    if (MessageBox.Show("Deseja excluir esta operadora?",
                                     "Aviso!", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                    {
                        CommandModConf.excluirOperadora(codigoOperadora);
                        MessageBox.Show(btnExcluirOp, "Operadora Excluída");
                        this.btnOperadoraOperacaoConcluido();
                    }
                }
                else
                    MessageBox.Show(lvPrestador, "Esta Operadora está vinculada a algum Prestador, " +
                        "\n Exclua Todos os vínculos antes!",
                        "Aviso!", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            else
            {
                MessageBox.Show("Selecione uma operadora!",
                                     "Aviso!", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }

        private void lvOpCadastradas_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (lvOpCadastradas.SelectedItems.Count > 0)
            {
                this.limpaCamposOp();
                updateOp = true;
                DataSet ds = CommandModConf.buscarOperadora(lvOpCadastradas.Items[lvOpCadastradas.SelectedIndices[0]].SubItems[1].Text);
                oldRegANS = txtRegANS.Text = ds.Tables[0].Rows[0]["regANS"].ToString();
                txtNome.Text = ds.Tables[0].Rows[0]["nome"].ToString();
                if (ds.Tables[0].Rows[0]["logo"] != DBNull.Value)
                    if (((byte[])ds.Tables[0].Rows[0]["logo"]).Count() != 0)
                    {
                        Stream strImg = new MemoryStream((byte[])ds.Tables[0].Rows[0]["logo"]);
                        pbxLogo.Image = new Bitmap(Image.FromStream(strImg), 83, 51);
                    }
                ds = CommandModConf.buscaURL(oldRegANS);
                foreach (DataRow dr in ds.Tables[0].Rows)
                {
                    if (dr["tipoURL_cod"].ToString() == "1")
                        txtUrlCancelaGuia.Text = dr["url"].ToString();
                    else if (dr["tipoURL_cod"].ToString() == "2")
                        txtUrlLoteGuia.Text = dr["url"].ToString();
                    else if (dr["tipoURL_cod"].ToString() == "3")
                        txtUrlDemonstrativoRetorno.Text = dr["url"].ToString();
                    else if (dr["tipoURL_cod"].ToString() == "4")
                        txtUrlSolicitacaoProcedimento.Text = dr["url"].ToString();
                    else if (dr["tipoURL_cod"].ToString() == "5")
                        txtUrlStatusProtocolo.Text = dr["url"].ToString();
                    else if (dr["tipoURL_cod"].ToString() == "6")
                        txtUrlStatusAutorizacao.Text = dr["url"].ToString();
                }
                gpbOperadora.Enabled = true;
                btnSalvarOp.Enabled = true;
                btnExcluirOp.Enabled = true;
                btnCancelarPrestador.Enabled = true;
                btnNovoOp.Enabled = true;
            }
        }

        private void btnCancelarOp_Click(object sender, EventArgs e)
        {
            gpbOperadora.Enabled = false;
            btnCancelarOp.Enabled = false;
            btnSalvarOp.Enabled = false;
            btnExcluirOp.Enabled = false;
            btnNovoOp.Enabled = true;
            this.limpaCamposOp();
        }

        private void txtRegANS_MaskInputRejected(object sender, MaskInputRejectedEventArgs e)
        {
            if (txtRegANS.Text.Length != 6)
                MessageBox.Show(txtRegANS, "Registro ANS deve ter 6 dígitos!");
        }

        private void btnLogo_Click(object sender, EventArgs e)
        {
            if (ofdLogo.ShowDialog() == DialogResult.OK)
            {
                Image img = new Bitmap(ofdLogo.FileName);
                pbxLogo.Image = new Bitmap(img, 83, 51);
            }
        }

        #endregion

        #region Eventos Configurações

        #region gpbConfOperadoras

        private void lvwConfOperadoras_SelectedIndexChanged(object sender, EventArgs e)
        {
            //Verifica se está alterando as Configurações
            if (!updateConf)
                //Verifica se tem algum item selecionado no ListView de Operadoras
                if (lvwConfOperadoras.SelectedItems.Count > 0)
                {
                    //Verifica se o código é por CPF/CNPJ ou CódigoNaOperadora
                    if (lvwConfOperadoras.Items[lvwConfOperadoras.SelectedIndices[0]].SubItems[2].Text == "")
                    {
                        rbCPFCNPJ.Checked = true;
                    }
                    else
                    {
                        rbCodOp.Checked = true;
                        txtCodOp.Text = lvwConfOperadoras.Items[lvwConfOperadoras.SelectedIndices[0]].SubItems[2].Text;
                    }
                    carregaIntervaloLote();
                    gpbIntervaloLote.Enabled = true;
                    gpbCodigo.Enabled = true;
                    btnConfSalvar.Enabled = false;
                }
        }

        /// <summary>
        /// Botão para Adicionar nova Operadora
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnAddOperadora_Click(object sender, EventArgs e)
        {
            carregaOpNaoFiliadas();
            btnAddOperadora.Visible = false;
            btnRemoveOp.Visible = false;
            btnConfGravar.Visible = true;
            btnConfCancelar.Visible = true;
        }

        /// <summary>
        /// Grava a Adição de nova Operadora Filiada
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnConfGravar_Click(object sender, EventArgs e)
        {
            //Verifica se tem alguma operadora selecionada no ListView
            if (lvwConfOperadoras.SelectedIndices.Count > 0)
                //Verifica se algum tipo de Código esta selecionado
                if (rbCodOp.Checked != false || rbCPFCNPJ.Checked != false)
                {
                    CommandModConf.AddTrabalha(lvwConfOperadoras.Items[lvwConfOperadoras.SelectedIndices[0]].SubItems[1].Text, this.usuarioID, txtCodOp.Text);
                    btnConfCancelar_Click(sender, e);
                }
                else
                    MessageBox.Show("Selecione um tipo de Código para trabalhar com esta Operadora!");
            else
                MessageBox.Show("Selecione uma Operadora!");
        }

        /// <summary>
        /// Remove Operadora filiada
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnRemoveOp_Click(object sender, EventArgs e)
        {
            //Mensagem de verificação de Exclusão
            int resposta = Convert.ToInt32(MessageBox.Show("Deseja remover esta Operadora Filiada?",
                "Mensagem", MessageBoxButtons.YesNo, MessageBoxIcon.Question));
            if (resposta == 6)
            {
                CommandModConf.removeOperadoraFiliada(lvwConfOperadoras.Items[lvwConfOperadoras.SelectedIndices[0]].SubItems[1].Text, this.usuarioID);
                carregaOperadorasFiliadas();
            }
        }

        private void btnConfCancelar_Click(object sender, EventArgs e)
        {
            carregaOperadorasFiliadas();
            btnConfCancelar.Visible = false;
            btnConfGravar.Visible = false;
            btnAddOperadora.Visible = true;
            btnRemoveOp.Visible = true;
        }

        private void btnLoginConf_Click(object sender, EventArgs e)
        {
            Globals.ThisAddIn.LoginCTP = Globals.ThisAddIn.CustomTaskPanes.Add(new uc_Login(this), "Login para Configurações");
            Globals.ThisAddIn.LoginCTP.DockPosition = Microsoft.Office.Core.MsoCTPDockPosition.msoCTPDockPositionFloating;
            Globals.ThisAddIn.LoginCTP.Width = 125;
            Globals.ThisAddIn.LoginCTP.Height = 155;
            Globals.ThisAddIn.LoginCTP.Visible = true;
            Globals.ThisAddIn.LoginCTP.Control.Focus();
        }

        #endregion

        #region gpbConfCodigo

        private void rbCodOp_CheckedChanged(object sender, EventArgs e)
        {
            if (rbCodOp.Checked == true)
            {
                if (!updateConf)
                    if (lvwConfOperadoras.Items[lvwConfOperadoras.SelectedIndices[0]].SubItems[2].Text != "")
                    {
                        txtCodOp.Text = lvwConfOperadoras.Items[lvwConfOperadoras.SelectedIndices[0]].SubItems[2].Text;
                        btnConfSalvar.Enabled = false;
                    }
                    else
                    {
                        btnConfSalvar.Enabled = true;
                        txtCodOp.Text = "";
                    }
                txtCodOp.Visible = true;
            }
        }

        private void rbCPFCNPJ_CheckedChanged(object sender, EventArgs e)
        {
            if (rbCPFCNPJ.Checked == true)
            {
                if (!updateConf)
                    if (lvwConfOperadoras.Items[lvwConfOperadoras.SelectedIndices[0]].SubItems[2].Text != "")
                        btnConfSalvar.Enabled = true;
                    else
                        btnConfSalvar.Enabled = false;
                txtCodOp.Visible = false;
            }
        }

        private void txtCodOp_TextChanged(object sender, EventArgs e)
        {
            btnConfSalvar.Enabled = true;

        }

        private void btnConfSalvar_Click(object sender, EventArgs e)
        {
            if (rbCPFCNPJ.Checked == true)
                CommandModConf.atualizaTrabalha(lvwConfOperadoras.Items[lvwConfOperadoras.SelectedIndices[0]].SubItems[1].Text, this.usuarioID, "");
            else
                CommandModConf.atualizaTrabalha(lvwConfOperadoras.Items[lvwConfOperadoras.SelectedIndices[0]].SubItems[1].Text, this.usuarioID, txtCodOp.Text);
            btnConfSalvar.Enabled = false;
            carregaOperadorasFiliadas();
        }

        #endregion

        #region gpbConfIntervaloGuias

        private void btnAddIntervalo_Click(object sender, EventArgs e)
        {
            if (lvwConfOperadoras.SelectedIndices.Count > 0)
            {
                if (txtLoteMax.Text != "" && txtLoteMin.Text != "")
                {
                    if (Convert.ToInt64(txtLoteMin.Text) < Convert.ToInt64(txtLoteMax.Text))
                    {
                        CommandModConf.AddIntervaloLote(Convert.ToInt64(lvwConfOperadoras.Items[lvwConfOperadoras.SelectedIndices[0]].SubItems[3].Text), Convert.ToInt64(txtLoteMin.Text), Convert.ToInt64(txtLoteMax.Text), Convert.ToInt64(txtLoteMin.Text));
                        txtLoteMin.Text = "";
                        txtLoteMax.Text = "";
                        carregaIntervaloLote();
                    }
                    else
                        MessageBox.Show("Intervalo Inválido!");
                }
                else
                    MessageBox.Show("Preencha o intervalo corretamente!");
            }
        }

        private void dgvIntervaloLote_UserDeletingRow(object sender, DataGridViewRowCancelEventArgs e)
        {
            CommandModConf.removeIntervaloLote(Convert.ToInt64(dgvIntervaloLote.Rows[e.Row.Index].Cells["ID"].Value));
        }

        private void dgvIntervaloLote_CellEndEdit(object sender, DataGridViewCellEventArgs e)
        {
            CommandModConf.atualizaIntervaloLote(Convert.ToInt64(dgvIntervaloLote.Rows[e.RowIndex].Cells["ID"].Value), Convert.ToInt64(dgvIntervaloLote.Rows[e.RowIndex].Cells["De"].Value), Convert.ToInt64(dgvIntervaloLote.Rows[e.RowIndex].Cells["Ate"].Value), Convert.ToInt64(dgvIntervaloLote.Rows[e.RowIndex].Cells["Atual"].Value));
        }

        #endregion

        

       

        #endregion


    }
}


